package com.rds.material.service;

import com.alibaba.fastjson.JSONObject;
//import com.rds.material.domain.MaterialBill;
import com.rds.common.api.material.domain.MaterialBill;
import com.rds.system.domain.Sharing;
import org.apache.ibatis.annotations.Param;

import javax.servlet.ServletRequest;
import java.util.List;
import java.util.Map;

/**
 * 项目WBSService接口
 *
 * @author rds
 * @date 2021-08-17
 */
public interface IMaterialBillService
{
    /**
     * 查询材料清单
     *
     * @param id 材料清单ID
     * @return 材料清单
     */
    MaterialBill selectMaterialBillById(Long id);

    List<MaterialBill> selectMaterialBillByIds(List<Long> ids);



    List<Map<String,Object>>selectMaterialBillAndRdaPartRel(MaterialBill materialBill);

    /**
     * 查询材料清单
     * @param parentid 材料清单ID
     * @return 材料清单
     */
    MaterialBill selectMaterialBillByMid(@Param("parentid") Long parentid, @Param("materialid") Long materialid);

    /**
     * 查询材料清单列表
     *
     * @param materialBill 材料清单
     * @return 材料清单集合
     */
    List<MaterialBill> selectMaterialBillList(MaterialBill materialBill);

    /**
     * 查询材料清单列表提供给零件列表使用
     * 功能：左连接关系表的id，关系表有多个对于物料的id也是取其中一个
     */
    List<MaterialBill> selectMaterialBillListLJRel(MaterialBill materialBill);


    /**
     * 查询材料清单下级列表
     *
     * @param materialBill 材料清单
     * @return 材料清单集合
     */
    List<MaterialBill> selectMaterialBillLowerList(MaterialBill materialBill);

    /**
     * 新增材料清单
     *
     * @param materialBill 材料清单
     * @return 结果
     */
    int insertMaterialBill(MaterialBill materialBill, String type);

    int insertMaterialBills(MaterialBill materialBill);

    /**
     * 修改材料清单
     *
     * @param materialBill 材料清单
     * @return 结果
     */
    int updateMaterialBill(MaterialBill materialBill);

    /**
     * 删除材料清单
     *
     * @param id 材料清单ID
     * @return 结果
     */
    int deleteMaterialBillById(Long id);

    /**
     * 批量删除材料清单
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    int deleteMaterialBillByIds(Long[] ids);

    /**
     * 查询材料清单 版本信息
     *
     * @param toid id
     * @return 材料清单集合
     */
    MaterialBill selectMaterialBill(@Param("toid") Long toid);

    /**
     * 根据ID查询材料清单下级信息
     *
     * @param id id
     * @return 材料清单集合
     */
    List<MaterialBill> selectMaterialBillSubordinate(@Param("id") Long id);

    /**
     * 根据物料id删除材料清单
     *
     * @param materialid 材料清单ID
     * @return 材料清单
     */
    int deleteMaterialBillByMid(Long materialid);

    /**
     * 批量修改材料清单状态
     * @param materialid 材料清单id
     * @param stateid 需要更改的状态
     * @return 材料清单
     *
    int updateMaterialBillIds(@Param("materialid") Long materialid,@Param("stateid") Long stateid);*/


    /**
     * 根据id查询所有子层级
     * @param parentId
     * @return
     */
    public List<MaterialBill> getHierarchy(Long parentId);

    /**
     * 查找所有物料，包括关联和未关联
     */
    public List<MaterialBill> selectMaterialBillByAll(MaterialBill materialBill);

    /**
     * 查找所有物料下物料的数据
     */
    public List<MaterialBill> selectMaterialBillByUnasso(MaterialBill materialBill);

    /**
     * 根据iD移除物料关系
     */
    public void removeEbom(Long[] ids);

    /**
     * 根据id重新排序
     * @param ids
     */
    public void rankSort(Long[] ids);

    /**
     * 获取当前物料下的所有关系
     * @param materialBill
     * @return
     */
    List<MaterialBill> selectTreeList(MaterialBill materialBill);


    /**
     * 获取当前系列下的顶级零件
     * @param request
     * @return
     */
    JSONObject partsList(ServletRequest request);


    void copywbs(List<Sharing> sharing);


    int materialAdd(Map<String, Object> map);


}
